Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

core/database/src/commonTest/kotlin/org/meshtastic/core/database/entity/ReactionKeyTest.kt 41414f832f938b655c97bc07509bc140ea16e2a3 (41414f83) Text, 7.99 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.database.entity

Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787org.meshtastic.core.model.DataPacket
Tff7b72import T7ee787org.meshtastic.core.model.MessageStatus
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.proto.User
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertEquals

T8b949e/**
* The reaction dialog keys its rows on `user.id` + `emoji`. `myNodeNum` is part of the `reactions` primary key, so the
* legacy `myNodeNum = 0` bucket and this node's rows can carry the same pair — a duplicate key there is fatal.
*/
Tff7b72class T56d364ReactionKeyTest Tb4b4b4{

Tf0883e@Test
Tff7b72fun Td2a8ff`a legacy reaction and its current-node twin collapse to one entry`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3entity Tff7b72=
Te6edf3packetEntityTb4b4b4(
Te6edf3reactions Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= T79c0ff0Tb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3emojis Tff7b72= Te6edf3entityTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojis

Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3emojisTb4b4b4.Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffduplicate user+emoji keys crash the reaction list: Tffd700$Te6edf3emojisTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`the current-node row wins so its delivery status survives`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3entity Tff7b72=
Te6edf3packetEntityTb4b4b4(
Te6edf3reactions Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= T79c0ff0Tb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3reactionTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4,
Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4,
Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3DELIVEREDTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3MessageStatusTb4b4b4.Te6edf3DELIVEREDTb4b4b4, Te6edf3entityTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojisTb4b4b4.Te6edf3singleTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3statusTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`a lone legacy reaction is still shown`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3entity Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3reactions Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= T79c0ff0Tb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff🎉Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3entityTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojisTb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`distinct users and distinct emoji stay distinct`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3entity Tff7b72=
Te6edf3packetEntityTb4b4b4(
Te6edf3reactions Tff7b72=
Te6edf3listOfTb4b4b4(
Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff🎉Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!beef5678Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3keys Tff7b72= Te6edf3entityTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojisTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3userTb4b4b4.Te6edf3id Te6edf3to Tffa657itTb4b4b4.Te6edf3emoji Tb4b4b4}

Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3keysTb4b4b4.Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffkeys: Tffd700$Te6edf3keysTa5d6ff"Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3keysTb4b4b4.Te6edf3toSetTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3sizeTb4b4b4, Ta5d6ff"Ta5d6ffkeys: Tffd700$Te6edf3keysTa5d6ff"Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`another node's reactions are excluded entirely`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3entity Tff7b72=
Te6edf3packetEntityTb4b4b4(Te6edf3reactions Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4(Te6edf3myNodeNum Tff7b72= Te6edf3OTHER_NODE_NUMTb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3entityTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojisTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`same reply id reaction attaches only to its conversation`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3reaction Tff7b72=
Te6edf3reactionTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4,
Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!bbbb0002Ta5d6ff"Tb4b4b4,
Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3RECEIVEDTb4b4b4,
Te6edf3to Tff7b72= Ta5d6ff"Ta5d6ff!0000002aTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3collidingParent Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3reactions Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff0!aaaa0001Ta5d6ff"Tb4b4b4)
Tff7b72val Te6edf3intendedParent Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3reactions Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff0!bbbb0002Ta5d6ff"Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3collidingParentTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojisTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6ff👍Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3intendedParentTb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)Tb4b4b4.Te6edf3emojisTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3emoji Tb4b4b4}Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`normalized inbound PKI reaction attaches to its direct-message parent`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3reaction Tff7b72=
Te6edf3reactionTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4,
Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!bbbb0002Ta5d6ff"Tb4b4b4,
Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ffPKITa5d6ff"Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3RECEIVEDTb4b4b4,
Te6edf3to Tff7b72= Ta5d6ff"Ta5d6ff!0000002aTa5d6ff"Tb4b4b4,
Te6edf3channel Tff7b72= Te6edf3NodeAddressTb4b4b4.Te6edf3PKC_CHANNEL_INDEXTb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3intendedMessage Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff8!bbbb0002Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)
Tff7b72val Te6edf3otherConversation Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff8!aaaa0001Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)
Tff7b72val Te6edf3otherChannel Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff7!bbbb0002Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6ffPKITa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3intendedMessageTb4b4b4.Te6edf3emojisTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3emoji Tb4b4b4}Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3otherConversationTb4b4b4.Te6edf3emojisTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3otherChannelTb4b4b4.Te6edf3emojisTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`pre-fix raw-channel inbound PKI reaction remains visible`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3legacyReaction Tff7b72=
Te6edf3reactionTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4,
Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!bbbb0002Ta5d6ff"Tb4b4b4,
Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6fflegacy PKITa5d6ff"Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3RECEIVEDTb4b4b4,
Te6edf3to Tff7b72= Ta5d6ff"Ta5d6ff!0000002aTa5d6ff"Tb4b4b4,
Te6edf3channel Tff7b72= T79c0ff0Tb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3intendedMessage Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3legacyReactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff8!bbbb0002Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)
Tff7b72val Te6edf3otherConversation Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3legacyReactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff8!aaaa0001Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3listOfTb4b4b4(Ta5d6ff"Ta5d6fflegacy PKITa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3intendedMessageTb4b4b4.Te6edf3emojisTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3emoji Tb4b4b4}Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3otherConversationTb4b4b4.Te6edf3emojisTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`wrong non-PKI reaction channel remains excluded`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3reaction Tff7b72=
Te6edf3reactionTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4,
Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!bbbb0002Ta5d6ff"Tb4b4b4,
Te6edf3emoji Tff7b72= Ta5d6ff"Ta5d6ffwrong channelTa5d6ff"Tb4b4b4,
Te6edf3status Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3RECEIVEDTb4b4b4,
Te6edf3to Tff7b72= Ta5d6ff"Ta5d6ff!0000002aTa5d6ff"Tb4b4b4,
Te6edf3channel Tff7b72= T79c0ff1Tb4b4b4,
Tb4b4b4)

Tff7b72val Te6edf3message Tff7b72= Te6edf3packetEntityTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3reactionTb4b4b4)Tb4b4b4, Te6edf3contactKey Tff7b72= Ta5d6ff"Ta5d6ff8!bbbb0002Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3toMessageTb4b4b4(Te6edf3getNodeTb4b4b4)

Te6edf3assertEqualsTb4b4b4(Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3messageTb4b4b4.Te6edf3emojisTb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffpacketEntityTb4b4b4(Te6edf3reactionsTb4b4b4: Te6edf3ListTff7b72<Te6edf3ReactionEntityTff7b72>Tb4b4b4, Te6edf3contactKeyTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff0^allTa5d6ff"Tb4b4b4) Tff7b72= Te6edf3PacketEntityTb4b4b4(
Te6edf3packet Tff7b72=
Te6edf3PacketTb4b4b4(
Te6edf3uuid Tff7b72= T79c0ff1LTb4b4b4,
Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE_NUMTb4b4b4,
Te6edf3port_num Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3contact_key Tff7b72= Te6edf3contactKeyTb4b4b4,
Te6edf3received_time Tff7b72= T79c0ff1Te6edf3_000LTb4b4b4,
Te6edf3read Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3data Tff7b72= Te6edf3DataPacketTb4b4b4(Te6edf3bytes Tff7b72= Tff7b72nullTb4b4b4, Te6edf3dataType Tff7b72= T79c0ff1Tb4b4b4, Te6edf3from Tff7b72= Ta5d6ff"Ta5d6ff!abcd1234Ta5d6ff"Tb4b4b4, Te6edf3time Tff7b72= T79c0ff1Te6edf3_000LTb4b4b4)Tb4b4b4,
Te6edf3packetId Tff7b72= Te6edf3PACKET_IDTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3reactions Tff7b72= Te6edf3reactionsTb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffreactionTb4b4b4(
Te6edf3myNodeNumTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3userIdTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3emojiTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3statusTb4b4b4: Te6edf3MessageStatus Tff7b72= Te6edf3MessageStatusTb4b4b4.Te6edf3UNKNOWNTb4b4b4,
Te6edf3toTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tb4b4b4) Tff7b72= Te6edf3ReactionEntityTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3myNodeNumTb4b4b4,
Te6edf3replyId Tff7b72= Te6edf3PACKET_IDTb4b4b4,
Te6edf3userId Tff7b72= Te6edf3userIdTb4b4b4,
Te6edf3emoji Tff7b72= Te6edf3emojiTb4b4b4,
Te6edf3timestamp Tff7b72= T79c0ff1Te6edf3_000LTb4b4b4,
Te6edf3packetId Tff7b72= Te6edf3PACKET_IDTb4b4b4,
Te6edf3status Tff7b72= Te6edf3statusTb4b4b4,
Te6edf3to Tff7b72= Te6edf3toTb4b4b4,
Te6edf3channel Tff7b72= Te6edf3channelTb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3getNodeTb4b4b4: Te6edf3suspend Tb4b4b4(Tffa657String?Tb4b4b4) Tff7b72-Tff7b72> Te6edf3Node Tff7b72= Tb4b4b4{ Te6edf3userId Tff7b72-Tff7b72> Te6edf3NodeTb4b4b4(Te6edf3num Tff7b72= T79c0ff1Tb4b4b4, Te6edf3user Tff7b72= Te6edf3UserTb4b4b4(Te6edf3id Tff7b72= Te6edf3userIdTb4b4b4.Te6edf3orEmptyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4}

Tff7b72private Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72const Tff7b72val Te6edf3MY_NODE_NUM Tff7b72= T79c0ff4T79c0ff2
Tff7b72const Tff7b72val Te6edf3OTHER_NODE_NUM Tff7b72= T79c0ff9T79c0ff9
Tff7b72const Tff7b72val Te6edf3PACKET_ID Tff7b72= T79c0ff7
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.07s